home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
021-030
/
amok22
/
warnbootgen
/
warnbootgen.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
13KB
|
339 lines
(*************************************************************
*
* :Program. WarnBoot.mod
* :Author. Holger Gzella
* :Address. Freischöffenweg 12 D-4600 Dortmund 16
* :Phone. (0231) 85 16 02
* :Date. 11/7/89 19:30:07
* :Copyright. PD
* :Version. v1.0
* :Language. Modula-2
* :Translator. M2Amiga v3.2d
* :Contents. Utility to install a virus-warn-bootblock
* :Remark. This may be somewhat useful.
* :Remark. Beware to overwrite special bootblock-loaders!
*
*************************************************************)
MODULE WarnBootGen;
FROM Arts IMPORT Assert,TermProcedure;
FROM SYSTEM IMPORT ADR,ADDRESS,INLINE,LONGSET;
FROM Exec IMPORT MsgPortPtr,IOStdReqPtr,DoIO,IOStdReq,write,AllocMem,
MemReqSet,MemReqs,OpenDevice,CloseDevice,FreeMem,GetMsg,
ReplyMsg,WaitPort,update;
FROM ExecSupport IMPORT CreatePort,DeletePort,CreateStdIO,DeleteStdIO;
FROM Graphics IMPORT jam1,Text,Move,SetAPen,RastPortPtr;
FROM Intuition IMPORT NewWindow,WindowPtr,OpenWindow,CloseWindow,WindowFlags,
WindowFlagSet,IDCMPFlags,IDCMPFlagSet,IntuiText,Gadget,
GadgetPtr,IntuiMessagePtr,Border,GadgetFlags,boolGadget,
GadgetFlagSet,ActivationFlags,ActivationFlagSet,
ScreenFlags,ScreenFlagSet;
FROM Trackdisk IMPORT motor;
TYPE CardPtr = POINTER TO CARDINAL;
VAR dport : MsgPortPtr;
dreq : IOStdReqPtr;
ok,i : INTEGER;
buffer : CardPtr;
WhichGad : GadgetPtr;
class : IDCMPFlagSet;
WDaten,RD: NewWindow;
Fenster,R: WindowPtr;
Gadgets : ARRAY[0..4] OF Gadget;
Texte : ARRAY[0..4] OF IntuiText;
Rahmen,RB: Border;
xyFeld,RF: ARRAY[0..9] OF INTEGER;
Nachricht: IntuiMessagePtr;
rp : RastPortPtr;
PROCEDURE CleanUp;
BEGIN
IF Fenster#NIL THEN CloseWindow(Fenster); END;
IF dreq#NIL THEN DeleteStdIO(dreq); END;
IF dport#NIL THEN DeletePort(dport); END;
IF buffer#NIL THEN FreeMem(buffer,1024); END
END CleanUp;
PROCEDURE SetUpStuff;
BEGIN
xyFeld[0]:=0; xyFeld[1]:=0; xyFeld[2]:=99; xyFeld[3]:=0; xyFeld[4]:=99;
xyFeld[5]:=11; xyFeld[6]:=0; xyFeld[7]:=11; xyFeld[8]:=0; xyFeld[9]:=0;
RF[0]:=0; RF[1]:=0; RF[2]:=35; RF[3]:=0; RF[4]:=35; RF[5]:=11;
RF[6]:=0; RF[7]:=11; RF[8]:=0; RF[9]:=0;
WITH Rahmen DO
leftEdge:=-1; topEdge:=-1; frontPen:=1; backPen:=0; drawMode:=jam1;
count:=5; xy:=ADR(xyFeld); nextBorder:=NIL;
END;
WITH RB DO
leftEdge:=-1; topEdge:=-1; frontPen:=1; backPen:=0; drawMode:=jam1;
count:=5; xy:=ADR(RF); nextBorder:=NIL;
END;
FOR i:=0 TO 4 DO
WITH Texte[i] DO
frontPen:=1; backPen:=0; drawMode:=jam1; leftEdge:=1; topEdge:=2;
nextText:=NIL; iTextFont:=NIL; iText:=NIL;
END;
END;
Texte[0].iText:=ADR(" INFO "); Texte[1].iText:=ADR("Install DF0:");
Texte[2].iText:=ADR("Install DF1:"); Texte[3].iText:=ADR(" EXIT ");
Texte[4].iText:=ADR(" OK ");
WITH Gadgets[4] DO
nextGadget:=NIL; leftEdge:=143; topEdge:=135;
width:=34; height:=10; flags:=GadgetFlagSet{}; gadgetType:=boolGadget;
activation:=ActivationFlagSet{gadgImmediate,relVerify};
gadgetRender:=ADR(RB); selectRender:=NIL; gadgetText:=ADR(Texte[4]);
specialInfo:=NIL; gadgetID:=5; userData:=NIL;
END;
WITH Gadgets[3] DO
nextGadget:=NIL; leftEdge:=334; topEdge:=20;
width:=98; height:=10; flags:=GadgetFlagSet{}; gadgetType:=boolGadget;
activation:=ActivationFlagSet{gadgImmediate,relVerify};
gadgetRender:=ADR(Rahmen); selectRender:=NIL; gadgetText:=ADR(Texte[3]);
specialInfo:=NIL; gadgetID:=4; userData:=NIL;
END;
WITH Gadgets[2] DO
nextGadget:=ADR(Gadgets[3]); leftEdge:=226; topEdge:=20;
width:=98; height:=10; flags:=GadgetFlagSet{}; gadgetType:=boolGadget;
activation:=ActivationFlagSet{gadgImmediate,relVerify};
gadgetRender:=ADR(Rahmen); selectRender:=NIL; gadgetText:=ADR(Texte[2]);
specialInfo:=NIL; gadgetID:=3; userData:=NIL;
END;
WITH Gadgets[1] DO
nextGadget:=ADR(Gadgets[2]); leftEdge:=118; topEdge:=20;
width:=98; height:=10; flags:=GadgetFlagSet{}; gadgetType:=boolGadget;
activation:=ActivationFlagSet{gadgImmediate,relVerify};
gadgetRender:=ADR(Rahmen); selectRender:=NIL; gadgetText:=ADR(Texte[1]);
specialInfo:=NIL; gadgetID:=2; userData:=NIL;
END;
WITH Gadgets[0] DO
nextGadget:=ADR(Gadgets[1]); leftEdge:=10; topEdge:=20;
width:=98; height:=10; flags:=GadgetFlagSet{}; gadgetType:=boolGadget;
activation:=ActivationFlagSet{gadgImmediate,relVerify};
gadgetRender:=ADR(Rahmen); selectRender:=NIL; gadgetText:=ADR(Texte[0]);
specialInfo:=NIL; gadgetID:=1; userData:=NIL;
END;
WITH WDaten DO
leftEdge:=99; topEdge:=108; width:=442; height:=40; detailPen:=0;
blockPen:=1; idcmpFlags:=IDCMPFlagSet{gadgetUp}; checkMark:=NIL;
flags:=WindowFlagSet{windowDrag,windowDepth,activate}; bitMap:=NIL;
firstGadget:=ADR(Gadgets[0]); type:=ScreenFlagSet{wbenchScreen};
title:=ADR("WarnBootGen v1.0 by Holger Gzella 1989"); screen:=NIL;
END;
WITH RD DO
leftEdge:=160; topEdge:=53; width:=320; height:=150; detailPen:=0;
blockPen:=1; idcmpFlags:=IDCMPFlagSet{gadgetUp}; checkMark:=NIL;
flags:=WindowFlagSet{windowDrag,windowDepth,activate}; bitMap:=NIL;
firstGadget:=ADR(Gadgets[4]); type:=ScreenFlagSet{wbenchScreen};
title:=ADR("INFO über WarnBootGen v1.0 ..."); screen:=NIL;
END;
Fenster:=OpenWindow(WDaten);
Assert(Fenster#NIL,ADR("Konnte Fenster nicht öffnen."));
END SetUpStuff;
(* Das ist das assemblierte und mit Bootblock-Header versehene
WarnBoot.asm. Es wurde mit M2ACODE hier herein gepackt. *)
PROCEDURE BootBlock; (* $E- *)
BEGIN
INLINE(0444FH,05300H,0C80CH,0FE08H,00000H,00370H,00000H,0006EH);
INLINE(048E7H,0E07EH,043FAH,0008AH,04280H,02C79H,00000H,00004H);
INLINE(04EAEH,0FE68H,02C40H,0203CH,00000H,00000H,041FAH,00084H);
INLINE(0223CH,00000H,0005AH,04EAEH,0FFA6H,0224EH,02C79H,00000H);
INLINE(00004H,04EAEH,0FE62H,06600H,00022H,02C79H,00000H,00004H);
INLINE(0223CH,00002H,00004H,04EAEH,0FF28H,02C79H,00000H,00004H);
INLINE(0223CH,00002H,00004H,04EAEH,0FF3AH,04CDFH,07E07H,02C79H);
INLINE(00000H,00004H,043FAH,0001EH,04EAEH,0FFA0H,04A80H,06700H);
INLINE(0000CH,02040H,02068H,00016H,07000H,04E75H,0303CH,000FFH);
INLINE(06000H,0FFF8H,0646FH,0732EH,06C69H,06272H,06172H,07900H);
INLINE(0696EH,07475H,06974H,0696FH,06E2EH,06C69H,06272H,06172H);
INLINE(07900H,0017AH,00A48H,04F4CH,04745H,05220H,0475AH,0454CH);
INLINE(04C41H,02041H,03530H,03057H,02E00H,09300H,05014H,02A20H);
INLINE(04469H,0736BH,02069H,06E20H,04446H,0303AH,02075H,06E64H);
INLINE(02053H,07065H,06963H,06865H,07220H,0424FH,04F54H,02D56H);
INLINE(04952H,05553H,02D46H,05245H,04921H,02120H,02A00H,0EA00H);
INLINE(0641EH,04461H,07320H,05379H,07374H,0656DH,0206BH,0616EH);
INLINE(06E20H,06469H,06520H,04B6FH,06E74H,0726FH,06C6CH,06520H);
INLINE(0FC62H,06572H,06E65H,0686DH,0656EH,0202EH,02E2EH,000EBH);
INLINE(00064H,0322DH,04C49H,04E4BH,04552H,02020H,04D41H,05553H);
INLINE(04B4EH,04F50H,0462DH,03A20H,0426FH,06F74H,0766FH,07267H);
INLINE(0616EH,06720H,07765H,06974H,06572H,066FCH,06872H,0656EH);
INLINE(000E9H,00064H,03C2DH,05245H,04348H,05445H,05220H,04D41H);
INLINE(05553H,04B4EH,04F50H,0462DH,03A20H,04661H,07374H,04D65H);
INLINE(06D6FH,07279H,02061H,06273H,06368H,0616CH,07465H,06E00H);
INLINE(0E800H,05050H,06372H,06561H,07465H,06420H,06F6EH,02032H);
INLINE(0302FH,0352FH,03839H,02020H,03231H,03A34H,0393AH,03232H);
INLINE(02020H,02062H,07920H,0486FH,06C67H,06572H,02047H,07A65H);
INLINE(06C6CH,06100H,00000H,00000H,00000H,003EFH,00000H,00000H);
INLINE(00000H,003F2H,0C000H,00000H,0C001H,08000H,0C001H,08000H);
INLINE(0C007H,0E000H,0C001H,08000H,0C001H,08000H,0C000H,00000H);
INLINE(0C000H,00000H,0C180H,00300H,0C000H,00180H,0C387H,0C080H);
INLINE(0C186H,06000H,0C186H,060E7H,0C186H,061CEH,0C3C6H,0637EH);
INLINE(0C000H,00066H,0C3C3H,00066H,0C661H,08066H,0C060H,0C066H);
INLINE(0C1C0H,06066H,0C060H,0C07FH,0C661H,0807FH,0C3C3H,0007FH);
INLINE(0C000H,0007FH,0C180H,001FFH,0C3C0H,0007FH,0C3C6H,063FFH);
INLINE(0C667H,071FFH,0C7E6H,0B1FFH,0CC36H,031FFH,0CC36H,033FFH);
INLINE(0C000H,00000H,0C180H,00367H,0C000H,001CEH,0C387H,0C0FEH);
INLINE(0C186H,06006H,0C186H,06086H,0C186H,06186H,0C3C6H,06366H);
INLINE(0C000H,00007H,0C000H,0007FH,0C000H,0007FH,0C000H,0007FH);
INLINE(0C007H,0E07FH,0C000H,0007FH,0C000H,0007FH,0C000H,0007FH);
INLINE(0C000H,0007FH,0C000H,0007FH,0C000H,0007FH,0C000H,0007FH);
INLINE(0C007H,0E000H,0C000H,00067H,0C000H,0004EH,0C000H,0001CH);
INLINE(0C000H,0007EH,0C000H,0007EH,0C000H,00066H,0C000H,00066H);
INLINE(0C007H,0E067H,0C000H,00000H,0C000H,00000H,0C000H,00000H);
INLINE(0C000H,00000H,0C000H,00000H,0C000H,00000H,0C000H,00000H);
INLINE(0C007H,0E000H,0C000H,00000H,0C000H,00000H,0C000H,00000H);
INLINE(0C000H,00000H,0C000H,00067H,0C000H,0004CH,0C000H,0001CH);
INLINE(0C007H,0E00EH,0C000H,0000CH,0C000H,00010H,0C000H,0000FH);
INLINE(0C000H,00012H,0C000H,00000H,0C000H,00000H,0C000H,00000H);
INLINE(0C007H,0E000H,0C000H,00000H,0C000H,00000H,0C000H,00000H);
INLINE(0C000H,00000H,0C000H,00000H,0C000H,00000H,0C000H,00000H);
INLINE(0C007H,0E000H,0C000H,00067H,0C000H,0004FH,0C000H,0007FH);
INLINE(0C000H,0007FH,0C000H,0007FH,0C001H,0807FH,0C001H,0807FH);
INLINE(0C007H,0E07FH,0C001H,0807FH,0C001H,0807FH,0C000H,0007FH);
INLINE(0C000H,0007FH,0C3C3H,0007FH,0C661H,0807FH,0C060H,0C07FH);
INLINE(0C1C0H,0607FH,0C060H,0C07FH,0C661H,0807FH,0C3C3H,0007FH);
INLINE(0C000H,00000H,0C3C3H,00067H,0C661H,0804FH,0C060H,0C07FH);
INLINE(0C1C0H,0607FH,0C060H,0C07FH,0C661H,0807FH,0C3C3H,0007FH);
INLINE(0C000H,0007FH,0CC60H,0007FH,0CE60H,0007FH,0CF63H,0C07FH);
INLINE(0CDE6H,0607FH,0CCE6H,0607FH,0CC66H,0607FH,0CC63H,0C07FH);
INLINE(0C000H,0007FH,0C3C3H,0007FH,0C661H,0807FH,0C060H,0C07FH);
INLINE(0C1C0H,0607FH,0C060H,0C067H,0C661H,08000H,0C3C3H,00000H);
INLINE(0C000H,00000H,0CC60H,00000H,0CE60H,00000H,0CF63H,0C000H);
END BootBlock;
PROCEDURE ChipCopy(from: CardPtr; VAR to: CardPtr; size: LONGINT);
VAR ChipPtr: CardPtr;
copied : LONGINT;
BEGIN
ChipPtr:=AllocMem(1024,MemReqSet{chip});
to:=ChipPtr;
copied:=0;
REPEAT
ChipPtr^:=from^;
INC(ChipPtr,2); INC(from,2); INC(copied,2);
UNTIL copied=size;
END ChipCopy;
PROCEDURE Motor(iostdr:IOStdReqPtr;switch:LONGCARD);
BEGIN
iostdr^.command:=motor;
iostdr^.length:=switch;
DoIO(iostdr)
END Motor;
PROCEDURE WriteBootBlock(iostdr:IOStdReqPtr;block:LONGCARD;buffer:ADDRESS);
BEGIN
iostdr^.command:=write;
iostdr^.length:=1024;
iostdr^.data:=buffer;
iostdr^.offset:=512*block;
DoIO(iostdr);
iostdr^.command:=update;
DoIO(iostdr);
END WriteBootBlock;
PROCEDURE DoIt(UnitNumber: INTEGER);
BEGIN
ChipCopy(ADR(BootBlock),buffer,1024);
dport:=CreatePort(0,0);
Assert(dport#NIL,ADR("Konnte MsgPort nicht einrichten."));
dreq:=CreateStdIO(dport);
Assert(dreq#NIL,ADR("Konnte IO-Port nicht einrichten."));
OpenDevice(ADR("trackdisk.device"),UnitNumber,dreq,LONGSET{});
Motor(dreq,1);
WriteBootBlock(dreq,0,buffer);
Motor(dreq,0);
CloseDevice(dreq);
END DoIt;
PROCEDURE Info;
BEGIN
R:=OpenWindow(RD);
Assert(R#NIL,ADR("Konnte Info-Fenster nicht öffnen."));
rp:=R^.rPort;
SetAPen(rp,3);
Move(rp,64,20);
Text(rp,ADR("*** WarnBootGen v1.0 ***"),24);
SetAPen(rp,1);
Move(rp,68,29);
Text(rp,ADR("by HOLGER GZELLA / 1989"),23);
Move(rp,52,40);
Text(rp,ADR("Installiert einen Bootblock"),27);
Move(rp,40,49);
Text(rp,ADR("wahlweise auf die Disk in DF0:"),30);
Move(rp,48,58);
Text(rp,ADR("oder DF1:. Solange der rote,"),28);
Move(rp,44,67);
Text(rp,ADR("blinkende Kasten (Alert) beim"),29);
Move(rp,32,76);
Text(rp,ADR("Booten erscheint, ist garantiert"),32);
Move(rp,24,85);
Text(rp,ADR("kein Boot-Virus auf der Startdisk."),34);
Move(rp,36,94);
Text(rp,ADR("Zusätzlich kann man durch Druck"),31);
Move(rp,48,103);
Text(rp,ADR("auf die rechte Maustaste das"),28);
Move(rp,72,112);
Text(rp,ADR("FastMemory abschalten."),22);
SetAPen(rp,3);
Move(rp,40,122);
Text(rp,ADR("WarnBootGen ist PUBLIC-DOMAIN!"),30);
LOOP
WaitPort(R^.userPort);
Nachricht:=GetMsg(R^.userPort);
WHILE Nachricht#NIL DO
class:=Nachricht^.class;
ReplyMsg(Nachricht);
IF (gadgetUp IN class) THEN EXIT; END;
END;
Nachricht:=GetMsg(R^.userPort);
END;
CloseWindow(R);
END Info;
BEGIN
TermProcedure(CleanUp);
SetUpStuff;
LOOP
WaitPort(Fenster^.userPort);
Nachricht:=GetMsg(Fenster^.userPort);
WHILE Nachricht#NIL DO
class:=Nachricht^.class;
WhichGad:=Nachricht^.iAddress;
ReplyMsg(Nachricht);
IF (gadgetUp IN class) THEN CASE WhichGad^.gadgetID OF
1: Info |
2: DoIt(0) |
3: DoIt(1) |
4: EXIT |
END;
END;
Nachricht:=GetMsg(Fenster^.userPort);
END;
END;
END WarnBootGen.